home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / cmath.txt < prev    next >
Text File  |  1999-03-06  |  40KB  |  871 lines

  1.     CCCCCCC     MM         MM          A         TTTTTTTTTT    HH      HH
  2.   CC            MMM       MMM         AAA            TT        HH      HH
  3.  CCC            MMMM     MMMM        AA AA           TT        HH      HH
  4.  CCC            MM MM   MM MM       AA   AA          TT        HHHHHHHHHH
  5.  CCC            MM  MM MM  MM      AAAAAAAAA         TT        HH      HH
  6.   CC            MM   MMM   MM     AA       AA        TT        HH      HH
  7.     CCCCCCC     MM    M    MM    AA         AA       TT        HH      HH
  8.  
  9.  
  10.                            CMATH 1.5
  11.  
  12.                     Dr. Martin Sander Software Development
  13.                     Sertürnerstr. 11
  14.                     D-37085 Göttingen
  15.                     Germany
  16.                     e-mail: MartinSander@Bigfoot.com
  17.                     http://www.optivec.com
  18.  
  19. For the commercial version, please order by e-mail or through our web-site!
  20. See chapter 1.3 for details.
  21.  
  22. *****************************************************************************
  23.  
  24. !!     This is an ASCII text file!  It is best viewed with a simple        !!
  25. !!     DOS editor.                                                         !!
  26. !!     If you load this file into a word processor under Windows, you      !!
  27. !!     must use the filter "DOS text".                                     !!
  28. !!     Alternatively, you may use FCONVERT (shipped with Borland C++) to   !!
  29. !!     convert from ASCII (OEM) into the ANSI character set.               !!
  30. !!     preferably use the lettertype CourierNew 10 pt.                     !!
  31.  
  32.                  **************************************
  33.    German-speaking users:
  34.        Um die Kosten für das Herunterladen der Shareware-Version
  35.        über das Internet für alle so gering wie möglich zu halten,
  36.        enthält diese nur die englische Dokumentation. Sie finden
  37.        die deutsche Beschreibung separat unter
  38.                http://www.gwdg.de/~msander/Download/BC/CMDOCD.ZIP
  39.                  **************************************
  40.  
  41. OptiCode (TM) and OptiVec (TM) are trademarks of Dr. Martin Sander
  42. Software Dev.  Other brand and product names mentioned in this handbook
  43. for identification purposes are trademarks or registered trademarks of
  44. their respective holders.
  45.  
  46.  
  47. ****************************************************************************
  48. *                                                                          *
  49. *******                           Contents                           *******
  50. *                                                                          *
  51. ****************************************************************************
  52.  
  53. 1. Introduction
  54.    1.1 What is CMATH ?
  55.    1.2 Licence Terms
  56.    1.3 Registered Versions
  57.  
  58. 2. Getting Started
  59.    2.1 Installation
  60.    2.2 De-Installation
  61.  
  62. 3. Overview over the Functions of CMATH
  63.    3.1 Initialization of Complex Numbers
  64.    3.2 Data-Type Interconversions
  65.    3.3 Basic Complex Operations
  66.    3.4 Arithmetic Operations
  67.    3.5 Mathematical Functions
  68.  
  69. 4. Error Handling
  70.    4.1 General Error Handling of Complex Functions
  71.    4.2 Advanced Error Handling: Writing Messages into a File
  72.  
  73. 5. Syntax Reference
  74.    5.1 C++ Version
  75.    5.2 Plain-C Version
  76.  
  77. ****************************************************************************
  78. *                                                                          *
  79. *******                       1. Introduction                        *******
  80. *                                                                          *
  81. *****************************************************************************
  82.  
  83.  
  84. 1.1 What is CMATH ?
  85. -------------------
  86.  
  87. CMATH is a comprehensive library for complex-number arithmetis and
  88. mathematics. It is primarily intended as a high-quality replacement for
  89. the C++ complex class libraries presently available. In addition,
  90. all functions may be called from C, without the necessity to use C++.
  91. Superior speed, accuracy and safety are achieved through the 
  92. implementation in Assembly language (as opposed to the compiled or 
  93. inline C++ code of the complex class libraries).
  94. Only for the most simple tasks, alternative inline C++ functions are used.
  95.  
  96. The implementation was guided by the following rules:
  97.  
  98.    1. Without any compromise, top priority is always given to the mathema-
  99.       tically correct result, with the accuracy demanded for the respective
  100.       data type. Especially for complex functions, this necessitates a
  101.       very thorough treatment of many different situations. To this end,
  102.       the various cases have to be distinguished with pedantic care.
  103.    2. Mathematical functions must be "safe" under all circumstances.
  104.       They may for no reason simply crash, but have to perform a decent
  105.       error treatment. This is true even - and perhaps especially - for
  106.       seemingly nonsense arguments, with the single exception of the
  107.       non-numbers INF and NAN, which occur themselves only as a result
  108.       of serious errors in other functions.
  109.    3. By all possible means, greatest execution speed must be attained.
  110.       (After all, you did not buy your fast computer for nothing!)
  111.    4. The program code has to be as compact as possible. However, in case
  112.       of conflicts, faster execution speed is always given priority
  113.       over smaller code size.
  114.  
  115. Having a look into the complex class libraries shipped with popular compilers,
  116. you will immediately discover the differences between our approach and theirs.
  117. Often the mathematical functions are implemented by simply writing down the
  118. textbook formula. This yields relatively compact source code. But, due to
  119. round-off error of intermediate results, the final results returned by these
  120. functions are sometimes very inaccurate or even completely wrong. Moreover,
  121. they may lead to unhandled floating-point errors (this means: program crash!).
  122. Unnecessary to mention that the code thus generated is rather slow.
  123.  
  124. For programmers who prefer classis C-style functions over C++, CMATH
  125. provides all complex-number operations and functions also for the language C.
  126. This is accomplished through an additional set of alternative declarations
  127. of the complex types as structs in place of classes.
  128.  
  129. CMATH versions for Pascal and Delphi are also available. As far as possible,
  130. all functions have the same names in the Pascal/Delphi version as in the
  131. C version.
  132. The C++ classes and the C structs are binary compatible with each other.
  133. This point may become important for large projects with mixed C and C++
  134. modules.
  135.  
  136. Existing Borland C++ code which uses the complex class library contained in
  137. <complex.h> can be left unchanged, because the CMATH functions and data
  138. types are also binary compatible with those of <complex.h>.
  139. Here is a detailed description of how to switch from the complex classes of
  140. Borland C++ to the new implementation given by CMATH:
  141.  
  142. *  In C++ modules, replace the statement
  143.        #include <complex.h>
  144.    by the statement
  145.        #include <newcplx.h>
  146.    Then, the following three complex classes are defined:
  147.    class complex<float>,  class complex<double>,
  148.    and  class complex<extended>.
  149.  
  150.    The data types fComplex, dComplex, and eComplex are defined as
  151.    synonyms for these classes.
  152.    In order to avoid the letter "L" (which is already over-used by
  153.    "long int" and "unsigned long" in the language C), the type
  154.    "extended" is used here as a synonym for "long double".
  155.    Consequently, the complex data type consisting of long doubles
  156.    is named "eComplex".
  157.    Thereby, the way is held open for a future inclusion of whole-
  158.    number complex types into CMATH. Then,"liComplex" and "ulComplex"
  159.    will denote the complex types consisting of "long int" or
  160.    "unsigned long" parts, respectively.
  161.  
  162. *  If you prefer to have the "classic" class complex of older releases
  163.    of Borland C++, you have to declare
  164.        #define CMATH_CLASSIC_COMPLEX
  165.    before (!) including <newcplx.h>.
  166.    In this case, only the class complex will be defined and gets the synonym
  167.    dComplex. Here you will have no access to the complex-number functions of
  168.    float and of